package com.jivesoftware.os.amzabot.deployable.endpoint;
import com.jivesoftware.os.amzabot.deployable.AmzaBotService;
import com.jivesoftware.os.mlogger.core.MetricLogger;
import com.jivesoftware.os.mlogger.core.MetricLoggerFactory;
import io.swagger.annotations.Api;
import java.util.Map.Entry;
import java.util.Set;
import javax.inject.Singleton;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@Api(value = "Amza Bot")
@Singleton
@Path("/api/amzabot/v1")
public class AmzaBotEndpoints {
private static final MetricLogger LOG = MetricLoggerFactory.getLogger();
private final AmzaBotService service;
public AmzaBotEndpoints(@Context AmzaBotService service) {
this.service = service;
}
@POST
@Path("/keys/{name}")
public Response set(@PathParam("name") String key, String value) {
try {
service.set(key, value);
return Response.accepted().build();
} catch (Exception e) {
LOG.error("Failed to handle set name:{} {}", new Object[] { key, value }, e);
return Response.serverError().build();
}
}
@POST
@Path("/keys")
public Response set(Set<Entry<String, String>> entries) {
try {
service.multiSet(entries);
return Response.accepted().build();
} catch (Exception e) {
LOG.error("Failed to handle set batch: {}", new Object[] { entries }, e);
return Response.serverError().build();
}
}
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/keys/{name}")
public Response get(@PathParam("name") String key) {
try {
String value = service.get(key);
if (value == null) {
return Response.noContent().build();
}
return Response.ok(value).build();
} catch (Exception e) {
LOG.error("Failed to handle get name:{}", new Object[] { key }, e);
return Response.serverError().build();
}
}
@DELETE
@Path("/keys/{name}")
public Response delete(@PathParam("name") String key) {
try {
String value = service.delete(key);
if (value == null) {
return Response.noContent().build();
}
return Response.accepted().build();
} catch (Exception e) {
LOG.error("Failed to handle delete name:{}", new Object[] { key }, e);
return Response.serverError().build();
}
}
}